package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Date:2021/7/6
 * Author:ybc
 * Description:
 * 
 * @RequestMapping：
 * 是一个用来处理请求地址映射的注解，可用于类或方法上。用于类上，表示类中的所有响应请求的方法都是以该地址作为父路径。
 * RequestMapping注解有六个属性：
 *
 * 1、 value， method；
 * value：指定请求的实际地址，指定的地址可以是URI Template 模式；
 * method：指定请求的method类型， GET、POST、PUT、DELETE等；
 *
 * 2、consumes，produces；
 * consumes：指定处理请求的提交内容类型（Content-Type），例如application/json, text/html;
 * produces:指定返回的内容类型，仅当request请求头中的(Accept)类型中包含该指定类型才返回；
 * 
 * 3，params，headers；
 * params：指定request中必须包含某些参数值是，才让该方法处理。
 * headers：指定request中必须包含某些指定的header值，才能让该方法处理请求
 */
@Controller
@RequestMapping("/hello")
public class RequestMappingController {

    @RequestMapping(
            value = {"/testRequestMapping", "/test"},
            method = {RequestMethod.GET, RequestMethod.POST}
    )
    public String success(){
        return "success";
    }

    @GetMapping("/testGetMapping")
    public String testGetMapping(){
        return "success";
    }

    @RequestMapping(value = "/testPut", method = RequestMethod.PUT)
    public String testPut(){
        return "success";
    }

    @RequestMapping(
            value = "/testParamsAndHeaders",
            params = {"username","password!=123456"},
            headers = {"Host=localhost:8080"}
    )
    public String testParamsAndHeaders(){
        return "success";
    }

    //@RequestMapping("/a?a/testAnt")
    //@RequestMapping("/a*a/testAnt")
    @RequestMapping("/**/testAnt")
    public String testAnt(){
        return "success";
    }

    @RequestMapping("/testPath/{id}/{username}")
    public String testPath(@PathVariable("id")Integer id, @PathVariable("username") String username){
        System.out.println("id:"+id+",username:"+username);
        return "success";
    }

}
